From: Jonas Dreßler Date: Mon, 17 Feb 2020 14:40:55 +0000 (+0100) Subject: appDisplay: Disconnect folder "changed" signal when actors are destroyed X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~751^2^2~161 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=989c0ee49e392ae00e7c15bc9c15cee92d119eea;p=gnome-shell.git appDisplay: Disconnect folder "changed" signal when actors are destroyed We should disconnect the folders "changed" signal from the folder in case the FolderView or FolderIcon is destroyed. While at it, also remove the unused this._spaceReadySignalId of FolderIcon. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/1011 --- diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 042598ddc..3d0bea97b 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -1324,10 +1324,20 @@ class FolderView extends BaseAppView { action.connect('pan', this._onPan.bind(this)); this._scrollView.add_action(action); - this._folder.connect('changed', this._redisplay.bind(this)); + this.connect('destroy', this._onDestroy.bind(this)); + + this._folderChangedId = this._folder.connect( + 'changed', this._redisplay.bind(this)); this._redisplay(); } + _onDestroy() { + if (this._folderChangedId) { + this._folder.disconnect(this._folderChangedId); + delete this._folderChangedId; + } + } + _childFocused(actor) { Util.ensureActorVisibleInScrollView(this._scrollView, actor); } @@ -1515,7 +1525,8 @@ var FolderIcon = GObject.registerClass({ this.connect('destroy', this._onDestroy.bind(this)); - this._folder.connect('changed', this._sync.bind(this)); + this._folderChangedId = this._folder.connect( + 'changed', this._sync.bind(this)); this._sync(); } @@ -1525,9 +1536,9 @@ var FolderIcon = GObject.registerClass({ this.view.destroy(); - if (this._spaceReadySignalId) { - this._parentView.disconnect(this._spaceReadySignalId); - this._spaceReadySignalId = 0; + if (this._folderChangedId) { + this._folder.disconnect(this._folderChangedId); + delete this._folderChangedId; } if (this._dialog)